﻿$(function($) {
	$("#comit").off().on("click", function() {
		var data = {};
		var fepdata = $('#process_fep').data("rowData");
		if (fepdata) {
			data.fepd  = fepdata;

			$('#process_fep').removeData("rowData");
		}
		var wrokstationdata = $('#process_workstation').data("rowData");
		if (wrokstationdata) {
			data.wrokstation 	 = wrokstationdata;

			//获取数值之后移除数据项  
			$('#process_workstation').removeData("rowData");
		}
		var value = JSON.stringify(data);
		alert(value);
	});

	$("#export").off().on("click", function() {
		//alert("gen");
		var val = JSON.stringify($("#property_item_body").componentProperty('values'));
		alert(val);
		if ($('#measure_tab').data("rowData")) {
			var value = JSON.stringify($('#measure_tab').data("rowData"));
			//获取数值之后移除数据项  
			$('#measure_tab').removeData("rowData");
		}


	});
	var tableid = ["fep", "workstation"];
	var currentTable = "#process_fep";
	//初始化获取 driver和channel的下拉数据枚举
	getdr_ch_dataAdapter();
	//创建 tab
	$('#process_tab').jqxTabs({
		width: '99.5%',
		height: '625px',
		theme: theme,
		collapsible: true,
		initTabContent: function(tab) {
			// The 'tab' parameter represents the selected tab's index.
			//根据tab的页面初始化  对应 前置机和工作站的grid


			//初始化对应的表格。
			initGridFields(tableid[tab]);
		}

	}).on('tabclick', function(event) {
		var tabclicked = event.args.item;
		currentTable = "#process_" + tableid[tabclicked];
		// alert('The clicked tab is ' + tabclicked);
		//  alert( event.args.target );
	});
	initToolBar();

	var process_add_dlg = initPorcessAddDlg();

	function initToolBar() {
		var toolAction = {
			add: function() {
				//
				process_add_dlg.show(function(dlg) {

					if (dlg.processName != '') {
						var rows = $(currentTable).jqxGrid('getrows');
						var result = "";
						var procName = dlg.processName;
						for (var i = 0; i < rows.length; i++) {
							var row = rows[i];
							if (row.ProcName == procName) {
								$.config.alertDlg("进程名称 " + ProcName + " 已经重复了！");
								return;
							}
						}
						dlg.jqxWindow("close");
						var commit = $(currentTable).jqxGrid('addrow', null, {
							ProcName: dlg.processName,
							ProcDesc: dlg.processDesc
						});

						if (!$(currentTable).data("rowData")) {
							$(currentTable).data("rowData", {});
						}
						var items = $(currentTable).data("rowData");
						var item = items[dlg.processName];
						//如果之前有对改时间的删除项，则修改为更新项。
						if (item) {
							item.handle = 'update';
						} else {
							//否则，新建插入项
							item = {};
							item.handle = 'insert';

						}
						item.val = {};
						item.val["ProcDesc"] = dlg.processDesc;
						items[dlg.processName] = item;
						$(currentTable).data("rowData", items);


					} else {
						$.config.alertDlg("进程名称不能为空！")
					}
				});


			},
			delete: function() {
				table = $(currentTable);
				//设置为 'singlecell', 'multiplecells' or 'multiplecellsextended' 需要使用getselectedcell 方法
				// var cell = table.jqxGrid('getselectedcell');
				// var selectedrowindex = cell.rowindex;
				var selectedrowindex = table.jqxGrid('getselectedrowindex');
				var rowscount = table.jqxGrid('getdatainformation').rowscount;
				if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
					var id = table.jqxGrid('getrowid', selectedrowindex);

					var row = table.jqxGrid('getrowdata', 0);
					//alert(data.firstname + " " + data.lastname);

					if (!table.data("rowData")) {
						table.data("rowData", {});
					}
					var items = table.data("rowData");
					var item = items[row.ProcName]
					if (item) {
						//更新的，标识为删除。
						//添加的，直接删除
						if (item.handle == 'update') {
							item.handle = 'delete';
						} else {
							delete items[row.ProcName];

						}
					} else {
						//没有该项，添加，并标识为删除
						item = {};
						item.handle = 'delete';
						items[row.ProcName] = item;
					}
					table.data("rowData", items);

					var commit = table.jqxGrid('deleterow', id);

				}
			}
		};

		$("#toolbar").jqxButtonGroup({
			theme: theme,
			mode: 'default'
		}).on('buttonclick', function(event) {
			var clickedButton = event.args.button;
			toolAction[clickedButton[0].id]();
			//$("#eventsLog").text("Clicked: " + clickedButton[0].id);
		});
	}



	//表格显示需要的数据  *Type 为显示dropdownlist需要的数据
	var gridProperty = {
		fep: {
			datafields: [],
			columns: [],
			ProcType: [] //定义数据的时候，写在配置文件中的枚举数据类型
			// DriverType: [], //存在数据表中的枚举数据类型
			// ChannelType: [] //存在数据表中的枚举数据类型
		},
		workstation: {
			datafields: [],
			columns: [],
			ProcType: [] //定义数据的时候，写在配置文件中的枚举数据类型

		},
		DriverType: [], //存在数据表中的枚举数据类型
		ChannelType: [] //存在数据表中的枚举数据类型
	};
	////////////////////////////////////////////////////////////////////////
	//获取DriverType，ChannelType  的枚举数据 到 gridproperty 对应的数据项中。
	//
	////////////////////////////////////////////////////////////////////////
	function getdr_ch_dataAdapter() {
		var getDataAdapter = function(datatype) {
				var source = {
					datatype: "csv",
					datafields: [{
						name: 'value'
					}, {
						name: 'text'
					}],
					id: 'value',
					url: "defaultData/" + datatype + ".csv"
				};

				var dataAdapter = new $.jqx.dataAdapter(source, {

					autoBind: true,
					loadComplete: function() {

						console.dir(JSON.stringify(dataAdapter.records));
						gridProperty[datatype] = dataAdapter.records;
					},
					loadError: function(xhr, status, error) {
						alert('Error loading "' + source.url + '" : ' + error);
					}
				});
			}
			//获取 加载，驱动类型和通道类型的下拉列表。
		getDataAdapter("DriverType");
		getDataAdapter("ChannelType");


	}


	//////////////////////////////////////////////////////////////
	//
	//加载配置文件，并形成界面
	//////////////////////////////////////////////////////////////
	function initGridFields(tableid) {

		var url = "table_xml/SystemProcess.xml";
		// prepare the data
		var source = {
			datatype: "xml",
			datafields: [{
				name: 'Desc',
				map: 'm\\:properties>d\\:Desc'
			}, {
				name: 'Field',
				map: 'm\\:properties>d\\:Field'
			}, {
				name: 'DefaultValue',
				map: 'm\\:properties>d\\:DefaultValue'
			}, {
				name: 'DataType',
				map: 'm\\:properties>d\\:DataType'
			}, {
				name: 'Enum',
				map: 'm\\:properties>d\\:EnumData' //在低版本中，xml的项必须存在，且不能为空，高版本中可以不存在，且能为空，所以在没有枚举量的xml项中补填N作为占位
			}],
			root: "content",
			// record : "content",
			id: 'm\\:properties>d\\:Field',
			url: url
		};
		//加载配置文件
		var dataAdapter = new $.jqx.dataAdapter(source, {
			autoBind: true,
			loadComplete: function() {
				// get data records.
				console.dir("complete");
				var records = dataAdapter.records;
				var length = records.length;
				for (var i = 0; i < length; i++) {
					var record = records[i];
					var fields = {};
					fields["name"] = record.Field;
					gridProperty[tableid].datafields.push(fields);

					var column = {};
					column["datafield"] = record.Field;
					column["text"] = record.Desc;
					//进程名称不可编辑
					if (record.Field == "ProcName")
						column["editable"] = false;

					if (record.DataType.indexOf("Enum") > -1) //直接判断== 也可以，为了防止字符串中的空格
					{
						column["columntype"] = 'dropdownlist';
						if (record.Field == "ProcType") {

							try {
								// eval('(' + record.Enum + ')')	 字符串转换json的另一种方法		 					
								var enumval = jQuery.parseJSON(record.Enum); //将枚举类型的json字符串转换为json对象，
								// $(enumval).each(function(feild,text){
								$.each(enumval, function(value, text) { //遍历json对象，形成dropdownlist需要的source对象
									var item = {};
									item["value"] = value;
									item["text"] = text;
									// alert(feild+"=="+value);
									gridProperty[tableid].ProcType.push(item);
								});
							} catch (e) {

							}
							column["createeditor"] = function(row, column, editor) {
								// assign a new data source to the dropdownlist.

								editor.jqxDropDownList({
									source: gridProperty[tableid].ProcType,
									placeHolder: "选择进程类型:",
									autoDropDownHeight: true,
									displayMember: "text",
									valueMember: "value",
									theme: theme
								}).on('change', function(event) {
									var args = event.args;
									if (args) {
										// index represents the item's index.                      
										var index = args.index;
										var item = args.item;
										// get item's label and value.
										var label = item.label;
										var value = item.value;
										alert(value);
									}
								});


							};
						} else //是枚举类型，但是字段为 channelType 或是 driverType的 ，从数据库中加载数据
						{
							if (record.Field == "DriverType") //由于js中变量是引用的，对编辑器值的创建需要创建两个不同的adapter
							{


								column["createeditor"] = function(row, column, editor) {
									// assign a new data source to the dropdownlist.
									editor.jqxDropDownList({
										source: gridProperty.DriverType,
										placeHolder: "选择驱动：",
										autoDropDownHeight: true,
										displayMember: "text",
										valueMember: "value",
										theme: theme
									});

								};
							} else if (record.Field == "ChannelType") {


								column["createeditor"] = function(row, column, editor) {
									// assign a new data source to the dropdownlist. 
									editor.jqxDropDownList({
										source: gridProperty.ChannelType,
										placeHolder: "选择通道：",
										autoDropDownHeight: true,
										displayMember: "text",
										valueMember: "value",
										theme: theme
									});

								};
							}
						}
						// column ["initEditor"]= function (row, cellvalue, editor, celltext, width, height) {
						// set the editor's current value. The callback is called each time the editor is displayed.
						//       editor.jqxDropDownList({ width: width, height: height });

						//       editor.val(cellvalue);
						//   };



						column["getEditorValue"] = function(row, cellvalue, editor) {
							// return the editor's value.
							return editor.val();
						}

						column["cellvaluechanging"] = function(row, column, columntype, oldvalue, newvalue) {
							// return the old value, if the new value is empty.
							if (newvalue == "") return oldvalue;
						}

						column["cellbeginedit"] = function(row, datafield, columntype) {
							//获取row对应的datafield的flag的ckeckbox，如果是1，返回true，如果是0，返回false
							//如果量测启用，前面的所有项才可编辑
							//这里只有遥测会有这样的配置约束，所以在这里直接填写了遥测dom的div对应的id。在这里取dom的owner的id。不太好弄
							//波动 Fluc     --对应单元格返回false


							var editableFlag = true;
							if ((datafield == "ChannelType") || (datafield == "DriverType")) {
								var useflg = $('#process_' + tableid).jqxGrid('getcellvalue', row, "ProcType");

								if (useflg == 0) //proctype==0 标识当前为系统进程，不需要
								{

									editableFlag = false;

								}
							}

							return editableFlag;

						} //end cellbeginedit
						//checkbox 相关的单元格，如果checkbox没有备选中，不允许编辑
						column["cellsrenderer"] = function(row, datafield, value, defaultHtml, columnproperties) {
							//根据 column->feild column 判断当前列。
							var editableFlag = true;
							////
							var editableFlag = true;
							if ((datafield == "ProcType") || (datafield == "DriverType") || (datafield == "ChannelType")) {
								//combodata
								//var useflg= $('#SystemProcess').jqxGrid('getcellvalue', row, "ProcType"); 
								//  for( var i in gridProperty.procType)
								//	{
								//		if(i==value)
								//		  return text;
								//	};'
								var text = '无';
								if (datafield == "ProcType") {
									$.each(gridProperty[tableid][datafield], function(n, val) {
										if (val.value == value)
											text = val.text;
									});
								} else {
									$.each(gridProperty[datafield], function(n, val) {
										if (val.value == value)
											text = val.text;
									});
								}
								if ((value == 0) && (datafield != "ProcType"))
									text = "无";

								var element = $(defaultHtml);
								element.html(text);
								return element[0].outerHTML;

							} else if ((datafield == "ChannelType") || (datafield == "DriverType")) {
								alert($(this).html());
								var useflg = $('#SystemProcess').jqxGrid('getcellvalue', row, "ProcType");
								if (useflg == 0) //proctype==0 标识当前为系统进程，不需要
								{

									editableFlag = false;

								}
							}
							if (editableFlag == false) {
								var element = $(defaultHtml);
								element.css('color', '#131313');
								return element[0].outerHTML;
							}

							return defaultHtml;

						} //end cellsrenderer
					}
					gridProperty[tableid].columns.push(column);
				}

				//================== 表格初始话数据加载完成了之后才初始化 tab，然后在tab的init中初始化表格
				initGrid(tableid);
			}
		});
		//dataAdapter.dataBind();

	}

	/////////////////////////////////////////////////////////////
	//  系统进程编辑表格
	//
	/////////////////////////////////////////////////////////////
	function initGrid(tableid) {

		var source = {
			datatype: "csv",
			datafields: gridProperty[tableid].datafields,
			url: 'defaultData/SystemProcess.csv'
		};

		var dataAdapter = new $.jqx.dataAdapter(source, {
			async: false,
			loadError: function(xhr, status, error) {
				//	alert('Error loading "' + source.url + '" : ' + error);
			}
		});

		var table = $("#process_" + tableid).jqxGrid({
			width: '99.5%',
			height: '585',
			theme: theme,
			editable: true,
			altrows: true,
			source: dataAdapter,
			//  selectionmode : 'singlecell', //设置选择方式
			columns: gridProperty[tableid].columns
		}).on('cellvaluechanged', function(event) {

			var field = args.datafield;
			var rowindex = args.rowindex;
			var value = args.newvalue;
			if (!value)
				return;

			var row = table.jqxGrid('getrowdata', rowindex);
			var oldvalue = args.oldvalue;
			//设置变化值到缓存中
			if (!$(this).data("rowData"))
				$(this).data("rowData", {});
			var rowData = $(this).data("rowData");
			var item = rowData[row.ProcName];
			if (item) {
				//更新的，直接更新数据，更新对应字段的数据。
				//添加的 ，不更新操作，直接更新数据。
				//删除的，提示删除一条已经备删除的记录。
				if (item.handle == 'delete') {
					console.warn("错误，更新一条需要删除的记录");
				} else {
					item.val[field] = value;
				}
			} else {
				//没有就创建一条更新的数据
				item = {};
				item.handle = 'update';
				item.val = {};
				item.val[field] = value;
			}

			rowData[row.ProcName] = item; //更新到rowdata

			$(this).data("rowData", rowData);


			// console.dir(column + '==' + row + "===" + value + $(this).attr('id'));

		});


		return table;
	};
	//////////////////////////////////////////////////////////////
	// 添加进程 对话框
	// 输入进程名称，进程，进程描述
	/////////////////////////////////////////////////////////////

	function initPorcessAddDlg() {

		var processName = $("#process_name").jqxInput({
			placeHolder: "",
			height: 22,
			width: 95,
			minLength: 1
		});
		var processDesc = $("#process_desc").jqxInput({
			placeHolder: "",
			height: 22,
			width: 95
		});

		function _call() {

		}
		//=====================================================================
		// 
		var process_add_dlg = $('#process_add_dlg').jqxWindow({

			height: 185,
			width: 195,
			resizable: false,
			isModal: true,
			modalOpacity: 0.3,
			theme: theme,
			autoOpen: false,
			okButton: $('#process_add_dlg #ok'),
			cancelButton: $('#process_add_dlg #cancel'),
			initContent: function() {
				$('#process_add_dlg #ok').jqxButton({
					theme: theme,
					width: '65px'
				});
				$('#process_add_dlg #cancel').jqxButton({
					theme: theme,
					width: '65px'
				});
				$('#process_add_dlg #ok').focus();


			}
		});
		$('#process_add_dlg #ok').off().on("click", function(event) {

			process_add_dlg.processName = processName.val();
			// alert(beginNo);

			process_add_dlg.processDesc = processDesc.val();
			_call(process_add_dlg);

		});
		process_add_dlg.show = function(callBack) {
			$(this).jqxWindow("open");
			_call = callBack
		}
		return process_add_dlg;
	}
});